package ar.uba.fi.taller2.cmmiassistant.frontend.adaptadores.combobox;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import ar.uba.fi.taller2.cmmiassistant.controlador.Controlador;
import ar.uba.fi.taller2.cmmiassistant.frontend.adaptadores.Etiqueta;
import ar.uba.fi.taller2.cmmiassistant.frontend.adaptadores.Item;
import ar.uba.fi.taller2.cmmiassistant.frontend.adaptadores.comparators.NombreAreaProcesoComparator;
import ar.uba.fi.taller2.cmmiassistant.frontend.adaptadores.etiquetas.EtiquetaBeanProperty;
import ar.uba.fi.taller2.cmmiassistant.frontend.adaptadores.etiquetas.EtiquetaConstante;
import ar.uba.fi.taller2.cmmiassistant.modelo.cmmi.AreaProceso;
import ar.uba.fi.taller2.cmmiassistant.modelo.evaluacion.Evaluacion;
import ar.uba.fi.taller2.cmmiassistant.observador.ServicioNotificacion;

public class ComboBoxModelAreasProceso extends ComboBoxModelAdapter {

    protected static final Etiqueta SEPARADOR = new EtiquetaConstante(" - ");

    private final List<AreaProceso> areasProceso = new ArrayList<AreaProceso>();

    public ComboBoxModelAreasProceso() {

    }

    public Controlador getControlador() {

        return this.controlador;
    }

    public void setControlador(Controlador controlador) {

        super.setControlador(controlador);

        ServicioNotificacion.addObservador(this.getControlador().getModelo()
                .getEvaluacionSeleccionada(), this);
    }

    protected void actualizarItems() {

        this.getItems().clear();

        Evaluacion evaluacion = this.getControlador().getModelo()
                .getEvaluacionSeleccionada().getValor();

        if (evaluacion != null) {

            this.getAreasProceso().clear();
            this.getAreasProceso().addAll(
                    evaluacion.getRepresentacion().getAreasProceso());
            Collections.sort(this.getAreasProceso(),
                    NombreAreaProcesoComparator.instance());

            for (AreaProceso areaProceso : this.getAreasProceso()) {

                Item item = new Item(new EtiquetaBeanProperty(areaProceso,
                        "nombre"));
                this.getItems().add(item);
            }
        }
    }

    public List<AreaProceso> getAreasProceso() {
        return this.areasProceso;
    }

    public AreaProceso getAreaProceso(int index) {
        
        return index >= 0 ? this.getAreasProceso().get(index) : null;
    }
    
    public int indexOf(AreaProceso areaProceso) {
        
        return this.getAreasProceso().indexOf(areaProceso);
    }
}
